.TH wofi 7
.SH NAME
wofi \- Built in modes and other features

.SH DESCRIPTION
Wofi contains several built in modes as well as a lot of other features including combi which are documented here.

The config options documented here are stripped of mode names. Mode specific config options are placed in the config file in the format \fBmode\-example_opt=val\fR. For example dmenu has an option called \fBparse_action\fR which would be placed in the config as \fBdmenu\-parse_action=true\fR.

.SH MODES
Currently wofi has 3 built in modes
.IP 1. 4
run \- searches $PATH for executables and allows them to be run by selecting them.
.IP 2. 4
drun \- searches $WOFI_DATA_DIR/applications or $XDG_DATA_HOME/applications and $XDG_DATA_DIRS/applications for desktop files and allows them to be run by selecting them.
.IP 3. 4
dmenu \- reads from stdin and displays options which when selected will be output to stdout.

.P
In the event $WOFI_DATA_DIR or $XDG_DATA_HOME are not specified it defaults to ~/.local/share. If $XDG_DATA_DIRS is not specified it defaults to /usr/local/share:/usr/share.

Combi is not a mode however it does exist as a feature. You can use it by doing \-\-show mode1,mode2,mode3,etc. You can mix and match any number of modes however each mode can only be loaded once so doing something like \-\-show run,drun,run is not supported although I'm not sure why you'd do that in the first place.

.SH DMENU CONFIG OPTIONS
.TP
.B parse_action=\fIBOOL\fR
If true the result returned by dmenu will be stripped of image escape sequences and pango markup, default is false.
.TP
.B separator=\fICHAR\fR
The character used to separate dmenu entries, default is \\n.
.TP
.B print_line_num=\fIBOOL\fR
When an entry is selected the number of the line the entry was on is printed instead of the entry itself. This disables caching as it's fundamentally incompatible with it.

.SH RUN
In run mode holding ctrl while running an entry will cause arguments to be parsed even if always_parse_args=false. Holding shift will cause the entry to be run in a terminal.

.SH RUN CONFIG OPTIONS
.TP
.B always_parse_args=\fIBOOL\fR
If true spaces will not be treated as part of the executable name but rather as an argument separator equivalent to holding control while pressing enter, default is false.
.TP
.B show_all=\fIBOOL\fR
If true shows all the entries in path, this will show entries that have the same executable name, for example /bin/bash and /usr/bin/bash will be shown separately as bash instead of having one bash entry for the first one encountered, default is true.
.TP
.B print_command=\fIBOOL\fR
If true the executable that would be run will be printed to stdout instead of executing it, default is false.

.SH DRUN CONFIG OPTIONS
.TP
.B print_command=\fIBOOL\fR
If true the command used to launch the desktop file will be printed to stdout instead of invoking it, default is false.
.TP
.B display_generic=\fIBOOL\fR
If true then generic names will be displayed in () next to the application name, default is false.
.TP
.B disable_prime=\fIBOOL\fR
If true then wofi will ignore the PrefersNonDefaultGPU desktop variable, specifically this prevents wofi from setting DRI_PRIME, default is false.
.TP
.B print_desktop_file=\fIBOOL\fR
If true the path to the desktop file and the name of the corresponding action(if present) will be printed to stdout instead of invoking it, default is false.

.SH DRUN
When images are enabled drun mode will pull icon themes however being a GTK app it's possible you'll need to run gtk\-update\-icon\-cache to get them to apply.

.SH LOCATIONS
There are 9 possible locations which can be specified either by name or by number, the number scheme is the same as in rofi and the corresponding number is listed next to the names below, the default is center.
.IP 1. 4
center 0
.IP 2. 4
top_left 1
.IP 3. 4
top 2
.IP 4. 4
top_right 3
.IP 5. 4
right 4
.IP 6. 4
bottom_right 5
.IP 7. 4
bottom 6
.IP 8. 4
bottom_left 7
.IP 9. 4
left 8

.P
The x and y offsets are applied based on layer\-shell anchors which means an x offset can only be applied if wofi is anchored on the x axis, i.e. you can only use an x offset with the top_left, top_right, right, bottom_right, bottom_left, and left locations. center, top, and bottom can't have x offsets as they're not anchored on the x axis. Likewise y offsets can only be applied to top_left, top, top_right, bottom_right, bottom, and bottom_left locations. center, left, and right can't have y offsets because they're not anchored to the y axis. Since center can't have offsets on either as it's not anchored to any axis any x or y offset applied while using center will override the location to top_left for backwards compatibility reasons seeing as not doing so would simply ignore the offsets anyway.

.SH ORDER
There are 2 order options currently, default and alphabetical. Default means the entries are displayed in the order they are added by the mode, for all built in modes this is cached items first, followed by other entries in no specific order. Alphabetical means entries are alphabetical sorted period. These orders only affect the order when no search has been entered. Once a search is entered the order is re-arranged based on the current matching preference and this order is ignored.

.SH CACHING
Caching cannot be disabled however the cache file can be set to /dev/null to effectively disable it.

.SH WINDOW SWITCHER
Wofi does not have the ability to do window switching on its own as there is no way to do this with wayland/wlroots protocols however if you're using sway you can use swaymsg with dmenu mode to accomplish it.
The following script can be used to do window switching:

swaymsg \-t get_tree |
.br
  jq \-r '.nodes[].nodes[] | if .nodes then [recurse(.nodes[])] else [] end + .floating_nodes | .[] | select(.nodes==[]) | ((.id | tostring) + " " + .name)' |
.br
  wofi \-\-show dmenu | {
.br
    read \-r id name
.br
    swaymsg "[con_id=$id]" focus
.br
}

.SH WIDGET LAYOUT
This section is for advanced CSS which needs more control than the built in wofi CSS names/classes allow for. This widget layout is subject to change at any time and without warning so your CSS might very well break if you rely on this. Widgets have their corresponding names next to them if they have one.

.B window \- #window
.RS 4
.B box \- #outer\-box
.RS 4
.B entry \- #input

.B scrolledwindow \- #scroll
.RS 4
.B viewport
.RS 4
.B box
.RS 4
.B flowbox \- #inner\-box
.RS 4
.B flowboxchild \- #entry
.RS 4

.B .entry \- #unselected or #selected
.br
This only exists if there's ONLY 1 action. This is a WofiPropertyBox which has no CSS node and should probably not be used, the name is dependent on whether or not the entry is selected. See \fBwofi\fR(5) on #selected and #unselected for info.

.RS 4
.B image
.br
This is only present if an image is present in the entry and might occur multiple times if multiple images are present.

.B label
.br
This is only present if text is present in the entry and might occur multiple times if there are multiple text objects in a single entry.
.RE

.B expander
.br
This and its children only exist if there are multiple actions on the entry
.RS 4

.B .entry \- #unselected or #selected
.br
The main action. This is a WofiPropertyBox which has no CSS node and should probably not be used, the name is dependent on whether or not the entry is selected. See \fBwofi\fR(5) on #selected and #unselected for info.

.RS 4
.B image
.br
This is only present if an image is present in the entry and might occur multiple times if multiple images are present.

.B label
.br
This is only present if text is present in the entry and might occur multiple times if there are multiple text objects in a single entry.
.RE

.B list
.br
This contains all the secondary actions
.RS 4
.B row \- #entry
.RS 4
.B .entry \- #unselected or #selected
.br
This is a WofiPropertyBox which has no CSS node and should probably not be used, the name is dependent on whether or not the entry is selected. See \fBwofi\fR(5) on #selected and #unselected for info.

.RS 4
.B image
.br
This is only present if an image is present in the entry and might occur multiple times if multiple images are present.

.B label
.br
This is only present if text is present in the entry and might occur multiple times if there are multiple text objects in a single entry.
.RE
.RE
.RE
.RE
.RE
.RE
.RE
.RE
.B scrollbar
.RE
.RE
.RE
